2020 BE%=800: BE1%=5000: MAXN%=21: PA%=13: FOR I%=1 TO 6: READ CH%(I%): NEXT: FOR I%=1 TO 3: READ PIL%(I%): NEXT: FOR I%=1 TO 10: KEY I%,"": STLO(I%)=32767: NEXT
2030 FOR I%=1 TO 10: CTR0$=CTR0$+CHR$(47+I%): NEXT: CTR1$=CTR0$: FOR I%=1 TO 24: CTR1$=CTR1$+CHR$(64+I%): NEXT
2040 CLS: PRINT TIT$: FOR I%=1 TO 6: READ A$: A%=LEN(A$)+3: IF A%>LL% THEN LL%=A%
2070 FOR I%=1 TO 3: READ DLO%,PLO,L$: IF ABS(DLO%)>180 OR ABS(PLO)>59.5 THEN E%=1: RETURN
2080 IF L$="w" OR L$="W" THEN DLO%=-DLO%: PLO=-PLO
2090 TH(I%)=DR*(DLO%+PLO/60): NEXT I%
2100 READ INC%,HN%,VN%,NLINES%
2110 GOTO 2130
2120 E%=1: RESUME 2130
2130 ON ERROR GOTO 2240: OPEN "I",1,CFG$: LINE INPUT #1, X$: IF INSTR(X$,IDCFG$)=0 THEN 2250
2140 E%=0: WHILE EOF(1)=0: LINE INPUT #1, X$: A%=INSTR(X$,"#"): IF A% THEN X$=LEFT$(X$,A%-1)
2150 GOSUB 1070: A$="QTH-LOCATOR": GOSUB 1050: IF B% THEN Q0$=LEFT$(X$,6): GOTO 2230
2160 A$="WESTERNSAT": GOSUB 1050: IF B% AND ABS(X)<=180 THEN TH(1)=X*DR: GOTO 2230
2170 A$="CENTRALSAT": GOSUB 1050: IF B% AND ABS(X)<=180 THEN TH(2)=X*DR: GOTO 2230
2180 A$="EASTERNSAT": GOSUB 1050: IF B% AND ABS(X)<=180 THEN TH(3)=X*DR
2190 A$="INCREMENT": GOSUB 1050: IF B% AND X>=1 AND X<=60 THEN INC%=X
2200 A$="HORIZONTAL": GOSUB 1050: IF B% AND X>=1 AND X<=MAXN% THEN HN%=X
2210 A$="VERTICAL": GOSUB 1050: IF B% AND X>=1 AND X<=MAXN% THEN VN%=X
2220 A$="PAGELENGTH": GOSUB 1050: IF B% AND X>=1 AND X<=999 THEN NLINES%=X
2230 WEND: GOTO 2250
2240 RESUME 2250
2250 X$=COMMAND$: GOSUB 1060: IF X$="" THEN 2340
2260 A$=X$: A%=INSTR(A$,"/Q"): IF A% THEN Q0$=MID$(A$,A%+2,6)
2270 A%=INSTR(A$,"/W"): IF A% THEN GOSUB 1080: IF ABS(X)<=180 THEN TH(1)=X*DR
2280 A%=INSTR(A$,"/C"): IF A% THEN GOSUB 1080: IF ABS(X)<=180 THEN TH(2)=X*DR
2290 A%=INSTR(A$,"/E"): IF A% THEN GOSUB 1080: IF ABS(X)<=180 THEN TH(3)=X*DR
2300 A%=INSTR(A$,"/I"): IF A% THEN GOSUB 1080: IF X>=1 AND X<=60 THEN INC%=X
2310 A%=INSTR(A$,"/H"): IF A% THEN GOSUB 1080: IF X>=1 AND X<=MAXN% THEN HN%=X
2320 A%=INSTR(A$,"/V"): IF A% THEN GOSUB 1080: IF X>=1 AND X<=MAXN% THEN VN%=X
2330 A%=INSTR(A$,"/L"): IF A% THEN GOSUB 1080: IF X>=1 AND X<=999 THEN NLINES%=X
2340 ON ERROR GOTO 2380: CLOSE 1: OPEN "I",1,STO$: LINE INPUT #1,X$: IF INSTR(X$,IDSTO$)=0 THEN 2390
2350 CLOSE 1: OPEN "R",1,STO$,8: FIELD 1,8 AS BUF$
2360 FOR H%=1 TO 10: GET 1,6+H%: X1=CVS(LEFT$(BUF$,4)): Y1=CVS(MID$(BUF$,5,4)): IF ABS(X1)<=10800 AND ABS(Y1)<=5399.5 THEN STLO(H%)=X1: STLA(H%)=Y1: GOSUB 1300: GOSUB 7000: STO$(H%)=Q$
2370 NEXT: GOTO 2390
2380 RESUME 2390
2390 ON ERROR GOTO 2392: CLOSE: OPEN "I",1,OLF$: LDF=LOF(1): LINE INPUT #1,A$: IF INSTR(A$,IDOLF$)=0 THEN OLF%=1
2391 CLOSE: GOTO 2399
2392 IF ERR<>53 THEN OLF%=1
2395 RESUME 2399
2399 RESTORE 2560: READ PILOT$,H1$,H2$,FORM$: ON ERROR GOTO 0
7040 Q$="": IF I1%=-1 THEN I1%=359 ELSE IF I1%=360 THEN I1%=0
7050 K%=INT(I1%\2): I%=INT(K%\10): J%=INT(I3%\10)
7060 Q$=Q$+CHR$(I%+65)+CHR$(J%+65)
7070 Q$=Q$+CHR$(K%-I%*10+48)+CHR$(I3%-J%*10+48)
7080 I%=INT((I1% MOD 2)*12+I2/5): J%=INT(I4*24/60): Q$=Q$+CHR$(I%+65)+CHR$(J%+65)
7090 RETURN
8000 'Keys handling
8010 Q1$=Q$
8020 FLAG%=0: LOCATE CY%+1,LL%: FOR I%=1 TO 16: A$=INKEY$: NEXT: X=DLO%*60+PLO: Y=DLA%*60+PLA
8030 A$=INKEY$: IF A$="" THEN 8030 ELSE IF A$>="a" AND A$<="z" THEN A$=CHR$(ASC(A$)-32)
8040 SOUND BE1%,.1: B$=MID$(A$,2)
8050 IF B$="H" AND Y<5397 THEN Y=Y+2.5: GOTO 8280
8060 IF B$="P" AND Y>-5397 THEN Y=Y-2.5: GOTO 8280
8070 IF B$="M" THEN X=X+5: IF X>10800 THEN X=X-21600: GOTO 8280 ELSE 8280
8080 IF B$="K" THEN X=X-5: IF X<-10800 THEN X=X+21600: GOTO 8280 ELSE 8280
8090 IF A$="N" AND Y<5340 THEN Y=Y+60: GOTO 8280
8100 IF A$="S" AND Y>-5340 THEN Y=Y-60: GOTO 8280
8110 IF A$="E" THEN X=X+120: IF X>=10800 THEN X=X-21600: GOTO 8280 ELSE 8280
8120 IF A$="W" THEN X=X-120: IF X<-10800 THEN X=X+21600: GOTO 8280 ELSE 8280
8130 FOR I%=1 TO 3: IF B$=CHR$(102+I%*2) THEN TH(I%)=TH(I%)-PINC: GOSUB 1210: FLAG%=1: RETURN
8140 IF B$=CHR$(103+I%*2) THEN TH(I%)=TH(I%)+PINC: GOSUB 1210: PH=MPH: FLAG%=1: RETURN
8150 NEXT I%
8160 IF A$="F" THEN FI%=1: GOSUB 1020: PRINT "Log to file: "; ELSE IF A$="P" THEN FI%=0: GOSUB 1020: PRINT "Print: "; ELSE 8200
8162 PRINT "1=Stored locations 2=Region centered on the displayed location ";
8165 X$=INKEY$: IF X$="" THEN 8165 ELSE IF X$=CHR$(27) THEN GOSUB 1020: GOTO 8020 ELSE IF X$="1" THEN GOSUB 13000: GOTO 8020 ELSE IF X$="2" THEN GOSUB 14000: GOTO 8020 ELSE SOUND BE%,1: GOTO 8165
8200 IF A$="I" THEN INC%=5+(INC% MOD 60): GOSUB 1130: GOTO 8020
8210 IF A$="H" THEN HN%=(HN%+2) MOD (MAXN%+1): GOSUB 1140: GOSUB 1160: GOTO 8020
8220 IF A$="V" THEN VN%=(VN%+2) MOD (MAXN%+1): GOSUB 1150: GOSUB 1160: GOTO 8020
8230 IF B$=CHR$(110) AND NLINES%>1 OR B$=CHR$(111) AND NLINES%<999 THEN NLINES%=NLINES%+(ASC(B$)-110.5)*2: GOSUB 1170: GOTO 8020
8240 IF B$="" THEN B%=0 ELSE B%=ASC(B$)
8250 IF B%>93 AND B%<104 THEN A%=B%-93: IF STO$(A%)<>"" AND BB%<>B% THEN PLAY"MBL40O2GEGE": BB%=B%: GOTO 8030 ELSE STO%=1: STLO(A%)=X: STLA(A%)=Y: STO$(A%)=Q$: GOSUB 1100: LOCATE CY%+1,LL%: PLAY"MBL32O3GEC": GOTO 8030
8260 IF B%>58 AND B%<69 THEN B%=B%-58: IF ABS(STLO(B%))<=10800 THEN FLAG%=1: X1=STLO(B%): Y1=STLA(B%): GOSUB 1300: GOSUB 1030: Q$=STO$(B%): MTH=TH: MPH=PH: RETURN
8270 IF A$=CHR$(27) THEN 900 ELSE IF A$=CHR$(13) OR A$="Q" THEN RETURN ELSE SOUND BE%,1: GOTO 8030